<?php

require_once APPPATH . 'core/BaseDAO.php';

use models\M_cupon;

class CuponDAO extends BaseDAO {

    function __construct() {
        parent::__construct();
    }

    public function getVencimientoUltimoCupon() {
        try {

            $query = $this->em->createQuery('SELECT c.fecha_vencimiento
                                            FROM models\M_cupon c JOIN c.socio s
                                            WHERE c.pagado=false and (s.estado=0 or s.estado = 1 or s.estado = 2)
                                            ORDER BY c.id DESC')->setMaxResults(1);

            $vencimientoCupon = $query->getResult();



            return empty($vencimientoCupon) ? FALSE : $vencimientoCupon[0]['fecha_vencimiento'];
        } catch (Exception $e) {
            print_r($e->getMessage());
            return FALSE;
        }
    }

    public function getCuponesNoPagadosBySocio($idSocio) {

        try {

            $query = $this->em->createQuery('SELECT c 
                                            FROM models\M_cupon c JOIN c.socio s 
                                                                    JOIN s.categoria a 
                                                                    JOIN s.zona z
                                                                    JOIN c.cobrador b
                                            WHERE z.id > 0 AND c.pagado=false
                                                AND s.id = ' . $idSocio . '
                                            ORDER BY a.id, b.id, z.id, s.id');

            $cupones = $query->getResult();



            return empty($cupones) ? FALSE : $cupones;
        } catch (Exception $e) {
            return FALSE;
        }
    }

    public function getResumenCuponesNoPagados() {

        try {

            $query = $this->em->createQuery('SELECT c 
                                            FROM models\M_cupon c JOIN c.socio s 
                                                                    JOIN s.categoria a 
                                                                    JOIN s.zona z
                                                                    JOIN c.cobrador b
                                                                    JOIN s.estado e
                                            WHERE z.id > 0 AND c.pagado=false AND e.id<3
                                            ORDER BY b.id, a.id, z.id, s.apellido, s.nombre');

            $cupones = $query->getResult();

            return empty($cupones) ? FALSE : $cupones;
        } catch (Exception $e) {
            return FALSE;
        }
    }

    public function getCuponesNoDevueltosEnZona($zona_id) {

        try {

            $query = $this->em->createQuery('SELECT c 
                                            FROM models\M_cupon c JOIN c.socio s 
                                                                    JOIN s.categoria a 
                                                                    JOIN s.zona z
                                                                    JOIN c.cobrador b
                                                                    JOIN s.estado e
                                            WHERE z.id = ' . $zona_id . ' 
                                                AND c.pagado=false 
                                                AND e.id<3
                                                AND c.devuelto=false
                                            ORDER BY b.id, a.id, z.id, s.apellido, s.nombre');

            $cupones = $query->getResult();

            return empty($cupones) ? FALSE : $cupones;
        } catch (Exception $e) {
            return FALSE;
        }
    }

    public function getCuponesNoDevueltos() {

        try {

            $query = $this->em->createQuery('SELECT c 
                                            FROM models\M_cupon c JOIN c.socio s 
                                                                    JOIN s.categoria a 
                                                                    JOIN s.zona z
                                                                    JOIN c.cobrador b
                                                                    JOIN s.estado e
                                            WHERE z.id > 0 
                                                AND c.pagado=false 
                                                AND e.id<3
                                                AND c.devuelto=false
                                            ORDER BY b.id, a.id, z.id, s.apellido, s.nombre');

            $cupones = $query->getResult();

            return empty($cupones) ? FALSE : $cupones;
        } catch (Exception $e) {
            return FALSE;
        }
    }

    public function getCuponBy($valor, $campo, $tipo) {

        try {

            $comparador = $tipo === 'string' ? 'like' : '=';

            $qb = $this->em->createQueryBuilder();
            $qb->add('select', 'c')
                    ->add('from', 'models\M_cupon c')
                    ->add('where', 'c.' . $campo . ' ' . $comparador . ' ?1')
                    ->setParameter(1, $valor);

            $cupon = $qb->getQuery()->getResult();

            return empty($cupon) ? FALSE : $cupon[0];
        } catch (Exception $e) {

            return FALSE;
        }
    }

    public function getCupones() {

        try {

            $query = $this->em->createQuery('SELECT c 
                                            FROM models\M_cupon c JOIN c.socio s 
                                                                    JOIN s.categoria a 
                                                                    JOIN s.zona z
                                                                    JOIN c.cobrador b
                                            WHERE z.id > 0
                                            ORDER BY a.id, b.id, z.id, s.id');

            $cupones = $query->getResult();

            return empty($cupones) ? FALSE : $cupones;
        } catch (Exception $e) {
            return FALSE;
        }
    }

    public function getCuponesNoPagados() {

        try {

            $query = $this->em->createQuery('SELECT c 
                                            FROM models\M_cupon c JOIN c.socio s 
                                                                    JOIN s.categoria a 
                                                                    JOIN s.zona z
                                                                    JOIN c.cobrador b
                                                                    JOIN s.estado e
                                            WHERE z.id > 0 AND c.pagado=false AND e.id<3
                                            ORDER BY a.id, b.id, z.id, s.id');

            $cupones = $query->getResult();

            return empty($cupones) ? FALSE : $cupones;
        } catch (Exception $e) {
            return FALSE;
        }
    }

    public function generarCupon($idCobrador, $idSocio, $fechaVencimiento, $mesVencimiento, $anioVencimiento) {

        $CI = & get_instance();
        $CI->load->database();

        $query = $CI->db->query('INSERT INTO "BD_Operativa".cupon 
                                    (cobrador_id, socio_id, fecha_vencimiento, pagado, devuelto)
                                VALUES ( ' . $idCobrador . ', ' . $idSocio . ', \'' . $fechaVencimiento . '\', FALSE, FALSE )');

        $CI->db->close();

        return $query;
    }

    public function existeCupon($idCobrador, $idSocio, $fechaVencimiento, $mesVencimiento, $anioVencimiento) {

        $CI = & get_instance();
        $CI->load->database();

        $query = $CI->db->query('SELECT *
                                FROM "BD_Operativa".cupon cu
                                WHERE cu.cobrador_id=' . $idCobrador . '
                                     and cu.socio_id=' . $idSocio . '
                                     and to_char(cu.fecha_vencimiento, \'YYYY-MM\') LIKE \'' . $anioVencimiento . '-' . $mesVencimiento . '\'');

        $CI->db->close();

        $rows = $query->result_array();

        return empty($rows) ? FALSE : TRUE;
    }

    public function existeCuponNoPagado($cupon) {
        try {

            $query = $this->em->createQuery('SELECT c 
                                            FROM models\M_cupon c 
                                            WHERE c.id = ' . $cupon);

            $cupones = $query->getResult();

            return ($cupones[0]->getPagado()) ? FALSE : TRUE;
        } catch (Exception $e) {
            return FALSE;
        }
    }

    public function getCuponesNoPagadosVencidos($socio_id) {

        $CI = & get_instance();
        $CI->load->database();

        $query = $CI->db->query('SELECT DISTINCT COUNT (*) as "cantidad"
                                FROM "BD_Operativa".cupon cu
                                WHERE cu.socio_id=' . $socio_id . '
                                     and cu.fecha_vencimiento < \'' . date('Y-m-d') . '\'
                                     and cu.pagado=false');

        $rows = $query->result_array();

        $CI->db->close();

        return $rows[0]['cantidad'];
    }

    public function vaciarTabaCupon() {
        //Borra la Tabla Cupon Y reinicia La secuencia cupon_sec 

        $CI = & get_instance();
        $CI->load->database();

        $query = $CI->db->query('Delete  
                                FROM "BD_Operativa".cupon cu'
        );
        $query2 = $CI->db->query('ALTER SEQUENCE "BD_Operativa".cupon_sec restart 1;'
        );


        $CI->db->close();
    }

    public function getArrayCuponesNoPagadosBySocioTest($socio_id) {

        $CI = & get_instance();
        $CI->load->database();

        $query = $CI->db->query('SELECT cu.socio_id , cu.cobrador_id , cu.fecha_vencimiento , cu.pagado 
                                FROM "BD_Operativa".cupon cu
                                WHERE cu.socio_id=' . $socio_id . ' 
                                      and cu.pagado = false');

        $rows = $query->result_array();

        $CI->db->close();


        return (empty($rows)) ? False : $rows[0];
    }

    public function getCuponByID($idCupon) {
        try {

            $query = $this->em->createQuery('SELECT c 
                                            FROM models\M_cupon c
                                            WHERE c.id = ' . $idCupon);

            $cupones = $query->getResult();

            return empty($cupones) ? FALSE : $cupones[0];
        } catch (Exception $e) {
            return FALSE;
        }
    }

    public function getUltimoCuponBySocioId($socio_id) {
        try {

            $query = $this->em->createQuery('SELECT c 
                                            FROM models\M_cupon c JOIN c.socio s
                                            WHERE s.id = ' . $socio_id . '
                                                AND c.pagado = false
                                            ORDER BY c.id DESC');

            $cupones = $query->getResult();

            return empty($cupones) ? FALSE : $cupones[0];
        } catch (Exception $e) {
            return FALSE;
        }
    }

}